Repository navigation
feat(mobile): experiment with v5 stacks and native iPad columns - #12646
juliusmarminge wants to merge 22 commits into
Conversation
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
3a0cd97 to
bc16e28
Compare
bc16e28 to
b7ef7f9
Compare
dfbc6ea to
c951fb0
Compare
c951fb0 to
1750720
Compare
01b5919 to
eddb8f8
Compare
eddb8f8 to
2e01d2a
Compare
|
Thanks for working on this. We merged the orchestrator V2 rewrite in #2829, and we are closing this PR as part of that transition. The patch conflicts with the rewrite in apps/mobile/src/features/home/HomeRouteScreen.tsx, apps/mobile/src/features/home/HomeScreen.tsx. Even where the conflict is small enough to rebase, we are asking for fresh PRs against the new base so we can review and verify the behavior in V2. Sorry for the extra work this creates. If the change is still needed on V2, please rebuild it on current main, verify it there, and open a new PR linking back here. We're closing the current implementation without assuming the underlying request is resolved. |
Our current iPad workspace simulates columns in React and depends on a large react-native-screens header patch. This draft moves iPhone navigation to v5 stacks and the iPad workspace to native split-column stacks, with Duo in #12648 above it.
It builds on the Expo 58.0.0 / React Native 0.88 RC3 stack ending at #12052. RNS consumes
react-native-screens-5.0.0-t3.2.tgz, built from our versioned fork tag at b728d8ad7. The fork mirrors upstream main and combines the split-column prototype from #4666 with our eleven upstream proposals and the remaining integration changes. The published v5 alpha still lacks this split navigator.Stack.HostandStack.Screen; retain outgoing descriptors until native dismissal completes.ScrollViewMarker. Use native column measurements for top clearance. Both FlatList and LegendList keep rows below the header at rest, and Android retains its existing scroll view behavior.All Screens changes now live in the fork integration branch; the separate 663-line pnpm patch is removed. The fork builds JavaScript, declarations and native source with
yarn pack:t3 <output-directory>. The app commits the resulting tarball, and its embeddedt3-fork.jsonrecords the exact source commit and upstream base. The update procedure is in mobile-screens-fork.md.Package validation: clean installs and shared/Duo mobile typechecks pass, along with 32 focused navigation/geometry tests. Two independent checkouts produce byte-identical tarballs. All 871 shipped runtime/native source files, codegen configuration and runtime dependencies match the previous patched package. This packaging change was not rebuilt natively. The preceding Expo 58.0.0 refresh passed a fresh Xcode 27.1 build and cached conversation, fold/reopen, draft retention and unfolded split-keyboard smoke checks. Fresh pairing, folded keyboard layout, sheets, inspector transitions, iPad multitasking and Android builds still need verification.
Expo 58.0.0 Duo smoke check with cached fixture data:
Before — existing iPad workspace on the Expo base:
After — native v5 columns with the corrected sidebar background, top controls, search, and preserved draft:
Native Files inspector with the screen background:
Earlier sidebar collapse/expand recording with keyboard and draft retained. This recording invokes the existing sidebar button callback through CDP; UIKit performs the column transition. It is not evidence of a physical touch test.
iOS 27 automatic scroll-edge effect: before and after
Before, the forced bar material hid content beneath the title:
After, UIKit's automatic effect samples content beneath the custom title:
At rest:
Automatic scroll-edge rendering while the list scrolls. The recording uses the existing list scroll API through CDP.
Fresh iOS 26 iPad client: automatic native sidebar fade
Files loading and terminal Back: before and after
Before: duplicate loading indicators in the Files inspector:
After: one loader in the Files inspector:
Before: two terminal Back buttons:
After: one terminal Back button beside the sidebar control:
The after captures use a cached disconnected fixture to keep the initial loading state visible. The terminal Back was exercised through a native tap.
Rebased onto the latest Expo-only #12052 head, 06dcb14514e. Mobile typecheck and 27 focused navigation tests pass after the rebase.
iOS Release preview for iPad testing, queued from eddb8f80a92. Uses the internal
previewprofile, includes the registered iPad in its signing profile, and contains the Screens v5 fork with native iPad columns. The Duo layer is excluded. The first cloud attempt stopped before compilation because the local native dependency fingerprint was stale. After a clean dependency install, the local fingerprint exactly matches the cloud fingerprint,cfa1a47f51bd87d119b60920b5b66f013e16c57c; the replacement preview uses that runtime. Physical iPad testing should cover sidebar and inspector transitions, keyboard/draft retention, sheets, rotation and multitasking.Built with GPT-6.1 Sol in the Codex harness.
Trackpad scrolling follow-up: the native Gesture Handler patch rejects vertically dominant indirect pans before a horizontal row swipe can cancel the list. Horizontal trackpad swipes and the direct-touch preflight remain available. The iPadOS 26.5 simulator build and touch-scroll check passed. Seven probes against the compiled native recognizer passed with supplied trackpad translations, including vertical drift below the failure threshold, both horizontal directions, and the unchanged direct-touch path. Physical iPad testing confirmed the trackpad scrolling fix.
Latest signed iPad preview: install the trackpad scrolling candidate, built from ec840f1. Prepared with GPT-6.1 Sol in the Codex harness.
iPad workspace follow-up: apply 8-point horizontal content padding to HomeScreen when it owns the native primary column. The earlier inset change targeted ThreadNavigationSidebar, which is used by the JavaScript split layout rather than the native v5 column; that unused change was reverted. Selected-card spacing is now verified in light mode on iPadOS 26.5. Follow the adaptive route presentation so project selection, drafts, Settings, and Settings subpages stay in the secondary column when presented as cards. Compact iOS form sheets still use the overlay stack. Verified the project picker, draft, and Settings beside the sidebar on iPadOS 26.5; all 28 focused navigation tests and the mobile typecheck pass. React Doctor found only existing maintainability warnings.
Published the iOS preview update with the same native runtime as the signed trackpad preview, so no new installation is needed. Prepared with GPT-6.1 Sol in the Codex harness.
Latest corrected sidebar iOS preview update, verified with a selected card in light mode. Both v5 and the restacked Duo mobile typechecks pass.